/**
 * 全栈http配置，请求接口
 */

import axios from 'axios'

//后台访问地址
axios.defaults.baseURL = 'api';

//设置访问超时时间。例如超过了10s，就会告知用户当前请求超时，请刷新等。
axios.defaults.timeout = 10000;

//返回其他状态吗
axios.defaults.validateStatus = function (status) {
    return status >= 200 && status <= 500; // 默认的
  };
  //跨域请求，允许保存cookie
axios.defaults.withCredentials = true;

//post请求设置
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';


 //请求拦截
axios.interceptors.request.use(    
    config => {        
        // 每次发送请求之前判断vuex中是否存在token        
        // 如果存在，则统一在http请求的header都加上token，这样后台根据token判断你的登录情况
        // 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断 
        // const token = store.state.token;        
        // token && (config.headers.Authorization = token);        
        return config;    
    },    
    error => {        
        return Promise.error(error);    
})

// //  HTTPresponse拦截，响应拦截
axios.interceptors.response.use(res => {

    //相应回的auth-token
    sessionStorage.setItem('xAuthToken', res.headers['x-auth-token'])
    const status = res.data.code || 200
    // const statusWhiteList = website.statusWhiteList || [];
    const message = res.data.msg || '未知错误';
    //如果在白名单里则自行catch逻辑处理
    // if (statusWhiteList.includes(status)) return Promise.reject(res);
    //如果是401则跳转到登录页面
    // if (status === 401) store.dispatch('FedLogOut').then(() => router.push({path: '/login'}));
    // 如果请求为非200否者默认统一处理
    if (status !== 200) {
        Message({
            message: message,
            type: 'error'
        })
        return Promise.reject(new Error(message))
    }
    return res;
}, error => {
    // LoadingStart.close()
    return Promise.reject(new Error(error));
})

export default axios;
